#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=1005;
int g[N][N];
int d[N];
bool st[N];
int n;

void djs(){
	memset(d,0x3f,sizeof d);
	memset(st,false,sizeof st);
	d[0]=0;
	for(int i=0;i<=n;i++){
		int t=-1;
		for(int j=0;j<=n;j++){
			if(!st[j]&&(t==-1||d[t]>d[j])){
				t=j;
			}
		}
		st[t]=true;
		for(int j=0;j<=n;j++){
			d[j]=min(d[j],d[t]+g[t][j]);
		}
		
	}
	
}


int main(){
	int T,S,D;
	while(cin>>T>>S>>D){
		memset(g,0x3f,sizeof g);
		for(int i=0;i<T;i++){
		int a,b,c;
		cin>>a>>b>>c;
	    g[b][a]=g[a][b]=min(g[a][b],c);
	    if(a>n)n=a;
	    if(b>n)n=b;
	}
	for(int i=0;i<S;i++){
		int a;
		cin>>a;
		g[a][0]=g[0][a]=0;
	}
	djs();
	int res=0x3f3f3f3f;
	for(int i=0;i<D;i++){
		int a;
		cin>>a;
		res=min(d[a],res);
	}
	cout<<res<<endl;
}
	
	
	return 0;
} 
